#ifndef CShader_h
#define CShader_h
/**
@brief Class de Création de shader version Opengl 3.x
@author Bourgès Cyril
@date 7 août 2009
@date 23 janvier 2010
@see GlslShader
*/

//---STD-------------------------------------------------------------
#include <string>

//---GL--------------------------------------------------------------
#include <GL/glew.h>

//---Using-----------------------------------------------------------
using std::string ;

//-------------------------------------------------------------------

namespace SShader {

class CShader {

protected:

  string sVertex ;
  string sPixel ;
  ///Variable pour le shader
  unsigned int* m_uiProgramShader ;
  unsigned int* m_uiVertexShader ;
  unsigned int* m_uiFragmentShader ;

  CShader() ;

private:
  GLsizei          iVertexNStrings ;
  char**       ppcVertexStrings ;
  int*         piVertexLengths ;

  GLsizei          iFragmentNStrings ;
  char**       ppcFragmentStrings ;
  int*         piFragmentLengths ;


  bool affiche_warning ;



public:

  CShader(string _sVertex, string _sPixel) ;
  CShader(const CShader &copie) ;
  ~CShader() ;

  unsigned int* getProgramId() { return m_uiProgramShader ; }
  bool initShader() ;
  bool TestExtention () ;
  bool changeWarning () ;

private:
  void glewInitCShader() ;
  string LoadFichier (string filename) ;
  bool ShaderSourceFile(unsigned int shaderObj,
                        GLsizei &nstrings,
                        char** & strings,
                        int* &lengths,
                        string filename ) ;
  static void deleteFragment (unsigned int *&_uiId) ;
  static void deleteVertex (unsigned int *&_uiId) ;
  static void deleteProgram (unsigned int *&_uiId) ;

} ; //---CShader
}   //---namespace SShader

#endif
